{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "sys.path.append('..')\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import sklearn as sk\n",
    "import matplotlib.pyplot as plt\n",
    "# from utils.matplot import histogram\n",
    "import importlib\n",
    "# importlib.reload(utils.matplot)\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(150, 4)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import datasets\n",
    "iris = datasets.load_iris()\n",
    "X=iris['data']\n",
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.decomposition import PCA\n",
    "pca = PCA(n_components = 2) \n",
    "X2D = pca.fit_transform(X)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 聚成3类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "k = 3\n",
    "kmeans = KMeans(n_clusters=k)\n",
    "y_pred = kmeans.fit_predict(X2D)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-2.64241546,  0.66567601,  2.34652659])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "precision 0.8866666666666667\n",
      "recall 0.8866666666666667\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import recall_score, precision_score, roc_curve, roc_auc_score, precision_recall_curve, average_precision_score\n",
    "print(f\"precision {precision_score(y_true=iris.target, y_pred=y_pred, average='micro')}\")\n",
    "print(f\"recall {recall_score(y_true=iris.target, y_pred=y_pred, average='micro')}\")\n",
    "# print(f\"roc_auc {roc_auc_score(iris.target, y_pred, multi_class='ovr')}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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/LGS2bNnh/wbbNy4UeuhJcWzzz4rDh48WOzRo4c4ZswY8dNPP9V6SKrZuHFjyP+vZ8+erfXQVBHu/V5XV6f10FThcDjE8847T+zRo4fYv39/cfLkyeIHH3yg9bA0lYjt88wRIiIiIssyR0IFERERUQwYCBEREZFlMRAiIiIiy2IgRERERJbFQIiIiIgsi4EQERERWRYDISIiIrIsBkJERERkWQyEiIiIyLIYCBEREZFlMRAiIkv59ttvMXDgQPzHf/yH/7LNmzejR48e2LBhg4YjIyItsNcYEVnOmjVrMGPGDGzevBkXXXQRCgoKcN111+G//uu/tB4aEamMgRARWdKdd96J9evXY9SoUdi5cyc+//xzpKamaj0sIlIZAyEisqQffvgBQ4cOxb59+7B9+3YMGzZM6yERkQaYI0RElvTll1/iwIED8Hq9aGlp0Xo4RKQRzggRkeWcPHkSY8aMQUFBAS666CLU1NRg586dGDBggNZDIyKVMRAiIsspLy/H22+/jb/+9a/o06cPLr/8ctjtdrz33ntaD42IVMalMSKylE2bNqGmpgavvPIK0tPTYbPZ8Morr+DPf/4znn/+ea2HR0Qq44wQERERWRZnhIiIiMiyGAgRERGRZTEQIiIiIstiIERERESWxUCIiIiILIuBEBEREVkWAyEiIiKyLAZCREREZFkMhIiIiMiyGAgRERGRZTEQIiIiIstiIERERESW9f8BhaKMoWKMOp8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "i0=np.where(iris.target == 0)\n",
    "i1=np.where(iris.target == 1)\n",
    "i2=np.where(iris.target == 2)\n",
    "  \n",
    "plt.scatter(X2D[i0][:,0], X2D[i0][:,1], label='i0', color='r', s=25, marker=\"o\")\n",
    "plt.scatter(X2D[i1][:,0], X2D[i1][:,1], label='i1', color='b', s=25, marker=\"o\")\n",
    "plt.scatter(X2D[i2][:,0], X2D[i2][:,1], label='i2', color='g', s=25, marker=\"o\")\n",
    "\n",
    "plt.scatter(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1], label='i3', color='k', s=45, marker=\"s\")\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.title('Test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 输出距离"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "mlflow-dev-env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
